From 4f4f651b8cf4d97ab45fc90efff405eb5cecbc40 Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Mon, 31 Oct 2005 17:27:38 -0600 Subject: [PATCH] Fixes for first step in getting domU back up (by Kevin Tian) --- .../ia64/xen/drivers/patches/privcmd.c.patch | 50 ++++++++++--------- xen/arch/ia64/xen/hypercall.c | 4 ++ xen/arch/ia64/xen/xenmisc.c | 4 +- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch index c3903baa56..cce9fec2fc 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/patches/privcmd.c.patch @@ -11,39 +11,43 @@ diff -Naur xen/privcmd/privcmd.c xen.patched/privcmd/privcmd.c if ((rc = direct_remap_pfn_range( vma, msg[j].va&PAGE_MASK, -@@ -148,6 +151,7 @@ - } - break; +@@ -180,6 +183,15 @@ + for (i = 0; i < m.num; i++, addr += PAGE_SIZE, p++) { + if (get_user(mfn, p)) + return -EFAULT; ++#ifdef __ia64__ ++ ret = remap_pfn_range(vma, ++ addr&PAGE_MASK, ++ mfn, ++ 1<vm_page_prot); ++ if (ret < 0) ++ goto batch_err; ++#else -+#ifndef __ia64__ - case IOCTL_PRIVCMD_MMAPBATCH: { - mmu_update_t u; - privcmd_mmapbatch_t m; -@@ -206,7 +210,9 @@ - } + ret = create_lookup_pte_addr(vma->vm_mm, addr, &ptep); + if (ret) +@@ -190,6 +202,7 @@ + + if (HYPERVISOR_mmu_update(&u, 1, NULL, m.dom) < 0) + put_user(0xF0000000 | mfn, p); ++#endif + } + + ret = 0; +@@ -205,6 +218,7 @@ break; #endif -+#endif +#ifndef __ia64__ case IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN: { unsigned long m2pv = (unsigned long)machine_to_phys_mapping; pgd_t *pgd = pgd_offset_k(m2pv); -@@ -218,6 +224,7 @@ +@@ -216,6 +230,7 @@ -EFAULT: 0; } break; +#endif - case IOCTL_PRIVCMD_INITDOMAIN_STORE: { - extern int do_xenbus_probe(void*); -@@ -241,6 +248,9 @@ - - /* Initial connect. Setup channel and page. */ - xen_start_info->store_evtchn = data; -+#ifdef __ia64__ -+#define pfn_to_mfn(x) (x) -+#endif - xen_start_info->store_mfn = - pfn_to_mfn(virt_to_phys((void *)page) >> - PAGE_SHIFT); + default: + ret = -EINVAL; diff --git a/xen/arch/ia64/xen/hypercall.c b/xen/arch/ia64/xen/hypercall.c index 111219e97b..13f17500a9 100644 --- a/xen/arch/ia64/xen/hypercall.c +++ b/xen/arch/ia64/xen/hypercall.c @@ -187,6 +187,10 @@ ia64_hypercall (struct pt_regs *regs) regs->r8 = do_console_io(regs->r14, regs->r15, regs->r16); break; + case __HYPERVISOR_xen_version: + regs->r8 = do_xen_version(regs->r14, regs->r15); + break; + default: printf("unknown hypercall %x\n", regs->r2); regs->r8 = (unsigned long)-1; diff --git a/xen/arch/ia64/xen/xenmisc.c b/xen/arch/ia64/xen/xenmisc.c index a51059174c..1d2d74afb4 100644 --- a/xen/arch/ia64/xen/xenmisc.c +++ b/xen/arch/ia64/xen/xenmisc.c @@ -290,8 +290,8 @@ void context_switch(struct vcpu *prev, struct vcpu *next) //prev->domain->domain_id,(long)prev&0xffffff,next->domain->domain_id,(long)next&0xffffff); //if (prev->domain->domain_id == 1 && next->domain->domain_id == 0) cs10foo(); //if (prev->domain->domain_id == 0 && next->domain->domain_id == 1) cs01foo(); -printk("@@sw%d/%x %d->%d\n",smp_processor_id(), hard_smp_processor_id (), - prev->domain->domain_id,next->domain->domain_id); +//printk("@@sw%d/%x %d->%d\n",smp_processor_id(), hard_smp_processor_id (), +// prev->domain->domain_id,next->domain->domain_id); if(VMX_DOMAIN(prev)){ vtm_domain_out(prev); } -- 2.30.2